#ifndef GAMEOBJECT_H
#define GAMEOBJECT_H
#include "../external/RVO2/src/RVO.h"
#include <QPainter>

class State;

class GameObject
{
public:
    GameObject();
    void bandSimulator(RVO::RVOSimulator* simulator, int rvoId);

    void updateState(); // 调用 State::handle
    void syncFromRVO(); // 与 RVO2 同步位置信息
    bool isEnemyInRange(); // 有敌人在攻击范围内
    void setState(State* state); // 设置状态
    void setTarget(const RVO::Vector2& target = RVO::Vector2(0, 0)); // 设置目标位置
    RVO::Vector2 getPosition(); // 获取当前位置
    void setShouldStop(bool stop); // 设置是否停止移动
    bool getShouldStop() const; // 获取当前是否停止移动
    void setColor(const QColor& color); // 设置当前颜色
    void draw(QPainter* painter); // 绘制当前游戏对象

private:
    RVO::RVOSimulator* _simulator; // 模拟器
    int _rvoId; // 在 rvo 中的代理 id
    RVO::Vector2 _target; // 目标位置
    RVO::Vector2 _position; // 当前位置
    QColor _color; // 当前颜色,用于表示状态
    bool _shouldStop = false;  // 停止移动标记
    State* _state; // 状态机(具体是什么状态不用这里操心)
};

#endif // GAMEOBJECT_H
